package utils;

import java.util.ArrayList;
import java.util.EmptyStackException;
import java.util.List;

/**
 * @author 19242
 */
public class ArrayStack<T>{
    /**
     * 栈大小
     */
    private final int maxSize;
    /**
     * 栈数组
     */
    List<T> stack;
    /**
     * 栈顶指针，默认为-1，添加元素top++
     */
    private int top;

    /** 初始化栈 */
    public ArrayStack(int maxSize) {
        this.maxSize = maxSize;
        stack = new ArrayList<>(maxSize);
        top = -1;
    }

    /**
     * 判断是否为空,top=-1,说明栈中没有元素
     * @return top == -1
     */
    public boolean isEmpty(){
        return top == -1;
    }

    /**
     * 判断栈是否满了，
     * @return
     */
    public boolean isFull(){
        return top == maxSize - 1;
    }

    /**
     * 添加元素
     * @param i
     */
    public void push(T i){
        if (isFull()){
            System.out.println("栈满了，请不要再进来了");
            return;
        }
        top++;
        stack.add(i);
    }

    /**
     * 从栈顶取出一个元素
     * @return
     */
    public T pop(){
        if (isEmpty()){
            System.out.println("栈是空的，请不要在进来取了");
            throw new EmptyStackException();
        }
        T retNum = stack.remove(top);
        top--;
        return retNum;
    }
}



